﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Data.SqlClient;
using System.IO;
using System.Drawing.Printing;
using System.Collections;
using System.Drawing.Imaging;


namespace VerdePimienta2._0
{
    public partial class EmpresaNueva : Form
    {
        int CodigoVenta = 0;
        string Deuda = "0";

        string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\VP\\des_VP.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
        //string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\VP\\verdepimientadb.mdf;Integrated Security=True;User Instance=True";
        //string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Documents and Settings\\Chema\\Mis documentos\\Visual Studio 2008\\Projects\\VerdePimienta2.0\\VerdePimienta2.0\\verdepimientadb.mdf;Integrated Security=True;User Instance=True";
        public EmpresaNueva()
        {
            InitializeComponent();
        }
        public EmpresaNueva(int codigoVenta,string deuda) 
        {
            this.CodigoVenta = codigoVenta;
            this.Deuda = deuda;
            InitializeComponent();
        }

        private void btnGuardarEmpresa_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtNombEmpresa.Text) || string.IsNullOrEmpty(txtTlfEmpresa.Text))
            {
                MessageBox.Show("Debe rellenar al menos el nombre y el teléfono de la empresa.", "Error Datos Empresa",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                if ((ValidaTelefono(txtTlfEmpresa.Text)) && (ValidaMail(txtEmailEmpresa.Text)))
                {
                    System.Nullable<int> Resultado = 0;
                    
                    verdepimientadbDataSetTableAdapters.QueriesTableAdapter Adapter = new VerdePimienta2._0.verdepimientadbDataSetTableAdapters.QueriesTableAdapter();
                    Adapter.ComprobarClienteExistente(txtTlfEmpresa.Text, txtTlfEmpresa.Text, ref Resultado);
                    if (Resultado.Equals(0))
                    {
                        DialogResult dr = MessageBox.Show("Está seguro de añadir una nueva Empresa?",
                                              "Nueva Empresa.",
                                              MessageBoxButtons.OKCancel,
                                              MessageBoxIcon.Question);
                        if (dr == DialogResult.OK)
                        {
                            int nuevoIdCliente = generarCodigoCliente();
                            guardarDatosEmpresa(nuevoIdCliente);
                            asignarclienteaVenta(nuevoIdCliente);
                            resetDatosCliente();
                            this.Close();

                                                   }
                        else
                        {
                            //Dialog result 
                        }
                    }
                    else
                    {
                        MessageBox.Show("El cliente ya existe en la base de datos.", "Error Alta cliente.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    if (ValidaMail(txtEmailEmpresa.Text))
                    {
                        MessageBox.Show("El campo teléfono no tiene  el formato correcto", "Error Teléfono", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        MessageBox.Show("El mail no tiene  el formato correcto", "Error Mail", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }

        private void guardarDatosEmpresa(int codigoCliente)
        {
           
                SqlConnection conexionClientes = new SqlConnection(constring);
                conexionClientes.Open();
               try
                {
                SqlDataAdapter dtaClientes = new SqlDataAdapter("Select * From Clientes", conexionClientes);
                DataSet dtsClientes = new DataSet("Clientes");
                dtaClientes.FillSchema(dtsClientes, SchemaType.Source, "Clientes");
                dtaClientes.Fill(dtsClientes, "Clientes");
                DataTable dttClientes;
                dttClientes = dtsClientes.Tables["Clientes"];
                DataRow dtrClientes = dttClientes.NewRow();

                //Guardar datos APERTURA en la tabla 
                dtrClientes["Id"] = codigoCliente;
                dtrClientes["Nombre"] = txtNombEmpresa.Text;
                dtrClientes["CifEmpresa"] = txtCifEmpresa.Text;
                dtrClientes["RazonSocialEmpresa"] = txtRazSocialEmpresa.Text;
                dtrClientes["ContactoEmpresa"] = txtContactoEmpresa.Text;
                dtrClientes["Direccion"] = txtdireccionEmpresa.Text;
                dtrClientes["Poblacion"] = txtpoblacionEmpresa.Text;
                dtrClientes["Telefono"] = txtTlfEmpresa.Text;
                dtrClientes["Email"] = txtEmailEmpresa.Text;
                dtrClientes["FechaAdhesion"] = dateAhesionEmpresa.Text;
                dtrClientes["Observaciones"] = txtObservacionesEmpresa.Text;
                if (Deuda != "0")
                    dtrClientes["Deuda"] = Deuda;
                else
                    dtrClientes["Deuda"] = "0";
                dtrClientes["Tipo"] = "Empresa";

                //Guardar la nueva línea en la tabla
                dttClientes.Rows.Add(dtrClientes);

                SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(dtaClientes);
                dtaClientes.Update(dtsClientes, "Clientes");

                conexionClientes.Close();
                MessageBox.Show("Empresa guardada con éxito");

                Close();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error acceso a base de datos.", exc.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        
        private void asignarclienteaVenta(int codigoCliente)
        {
            string strSQL = "UPDATE Ventas SET IdCliente = '" + codigoCliente.ToString() + "' WHERE ID = " + CodigoVenta;

            SqlConnection conAp = new SqlConnection(constring);
            conAp.Open();

            SqlCommand cmSQL = new SqlCommand(strSQL, conAp);

            try
            {
                cmSQL.ExecuteNonQuery();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error en acceso a base de datos.(Modificacion Caja)." + exc.Message, "Apertura.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            conAp.Close();
        }

        public void resetDatosCliente()
        {
            txtNombEmpresa.Clear();
            txtCifEmpresa.Clear();
            txtRazSocialEmpresa.Clear();
            txtContactoEmpresa.Clear();
            txtdireccionEmpresa.Clear();
            txtpoblacionEmpresa.Clear();
            txtTlfEmpresa.Clear();
            txtEmailEmpresa.Clear();
            txtObservacionesEmpresa.Clear();
        }

        private int generarCodigoCliente()
        {
            int codigo = 0;
            string consulta = "Select count(*) from Clientes";

            SqlConnection conexion = new SqlConnection(constring);
            conexion.Open();

            SqlCommand cmd = conexion.CreateCommand();
            cmd.CommandText = consulta;

            codigo = (int)cmd.ExecuteScalar();
            cmd.Dispose();

            conexion.Close();

            codigo = codigo + 1;

            return codigo;
        }
    
        public bool ValidaTelefono(string telefono)
        {
            if ((EsNum(telefono)) && (telefono.Length == 9))
            {
                return true;
            } 
            else
            {
                return false;
            }
        }

        public bool ValidaMail(string email) 
        {
            if (Regex.IsMatch(email, @"^([\w-]+\.)*?[\w-]+@[\w-]+\.([\w-]+\.)*?[\w]+$"))
            {
                return true;
            }
            else
            {
                return false;
            }

        }

        public bool EsNum(string val)
        {
            Regex _isNumber = new Regex(@"[0123456789]");
            Match m = _isNumber.Match(val);
            return m.Success;
        }

        private void btnCancelarEmpresa_Click(object sender, EventArgs e)
        {
            resetDatosCliente();
            this.Close();
        }
    }
}
